home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / dynamic_printk.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  2.9 KB  |  94 lines

  1. #ifndef _DYNAMIC_PRINTK_H
  2. #define _DYNAMIC_PRINTK_H
  3.  
  4. #define DYNAMIC_DEBUG_HASH_BITS 6
  5. #define DEBUG_HASH_TABLE_SIZE (1 << DYNAMIC_DEBUG_HASH_BITS)
  6.  
  7. #define TYPE_BOOLEAN 1
  8.  
  9. #define DYNAMIC_ENABLED_ALL 0
  10. #define DYNAMIC_ENABLED_NONE 1
  11. #define DYNAMIC_ENABLED_SOME 2
  12.  
  13. extern int dynamic_enabled;
  14.  
  15. /* dynamic_printk_enabled, and dynamic_printk_enabled2 are bitmasks in which
  16.  * bit n is set to 1 if any modname hashes into the bucket n, 0 otherwise. They
  17.  * use independent hash functions, to reduce the chance of false positives.
  18.  */
  19. extern long long dynamic_printk_enabled;
  20. extern long long dynamic_printk_enabled2;
  21.  
  22. struct mod_debug {
  23.     char *modname;
  24.     char *logical_modname;
  25.     char *flag_names;
  26.     int type;
  27.     int hash;
  28.     int hash2;
  29. } __attribute__((aligned(8)));
  30.  
  31. int register_dynamic_debug_module(char *mod_name, int type, char *share_name,
  32.                     char *flags, int hash, int hash2);
  33.  
  34. #if defined(CONFIG_DYNAMIC_PRINTK_DEBUG)
  35. extern int unregister_dynamic_debug_module(char *mod_name);
  36. extern int __dynamic_dbg_enabled_helper(char *modname, int type,
  37.                     int value, int hash);
  38.  
  39. #define __dynamic_dbg_enabled(module, type, value, level, hash)  ({         \
  40.     int __ret = 0;                                 \
  41.     if (unlikely((dynamic_printk_enabled & (1LL << DEBUG_HASH)) &&         \
  42.             (dynamic_printk_enabled2 & (1LL << DEBUG_HASH2))))   \
  43.             __ret = __dynamic_dbg_enabled_helper(module, type,   \
  44.                                 value, hash);\
  45.     __ret; })
  46.  
  47. #define dynamic_pr_debug(fmt, ...) do {                        \
  48.     static char mod_name[]                            \
  49.     __attribute__((section("__verbose_strings")))                \
  50.      = KBUILD_MODNAME;                            \
  51.     static struct mod_debug descriptor                    \
  52.     __used                                    \
  53.     __attribute__((section("__verbose"), aligned(8))) =            \
  54.     { mod_name, mod_name, NULL, TYPE_BOOLEAN, DEBUG_HASH, DEBUG_HASH2 };\
  55.     if (__dynamic_dbg_enabled(KBUILD_MODNAME, TYPE_BOOLEAN,            \
  56.                         0, 0, DEBUG_HASH))        \
  57.         printk(KERN_DEBUG KBUILD_MODNAME ":" fmt,            \
  58.                 ##__VA_ARGS__);                    \
  59.     } while (0)
  60.  
  61. #define dynamic_dev_dbg(dev, format, ...) do {                    \
  62.     static char mod_name[]                            \
  63.     __attribute__((section("__verbose_strings")))                \
  64.      = KBUILD_MODNAME;                            \
  65.     static struct mod_debug descriptor                    \
  66.     __used                                    \
  67.     __attribute__((section("__verbose"), aligned(8))) =            \
  68.     { mod_name, mod_name, NULL, TYPE_BOOLEAN, DEBUG_HASH, DEBUG_HASH2 };\
  69.     if (__dynamic_dbg_enabled(KBUILD_MODNAME, TYPE_BOOLEAN,            \
  70.                         0, 0, DEBUG_HASH))        \
  71.             dev_printk(KERN_DEBUG, dev,                \
  72.                     KBUILD_MODNAME ": " format,        \
  73.                     ##__VA_ARGS__);                \
  74.     } while (0)
  75.  
  76. #else
  77.  
  78. static inline int unregister_dynamic_debug_module(const char *mod_name)
  79. {
  80.     return 0;
  81. }
  82. static inline int __dynamic_dbg_enabled_helper(char *modname, int type,
  83.                         int value, int hash)
  84. {
  85.     return 0;
  86. }
  87.  
  88. #define __dynamic_dbg_enabled(module, type, value, level, hash)  ({ 0; })
  89. #define dynamic_pr_debug(fmt, ...)  do { } while (0)
  90. #define dynamic_dev_dbg(dev, format, ...)  do { } while (0)
  91. #endif
  92.  
  93. #endif
  94.